package com.mz361.modules.system.service;

import com.mz361.common.enums.StatusEnum;
import com.mz361.modules.system.domain.PayOrder;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author niceale
 * @date 2024/05/07
 */
public interface PayOrderService {

    /**
     * 获取分页列表数据
     *
     * @param example 查询实例
     * @return 返回分页数据
     */
    Page<PayOrder> getPageList(Example<PayOrder> example);

    /**
     * 根据ID查询数据
     *
     * @param id 主键ID
     */
    PayOrder getById(Long id);

    /**
     * 根据订单ID查询订单
     *
     * @param orderId
     * @return
     */
    PayOrder getByOrderId(String orderId);

    /**
     * 根据用户ID和标准编号查询订单
     *
     * @param standardNo
     * @param memeberId
     * @return
     */
    PayOrder getByStandardNoAndMemeberId(String standardNo, Long memeberId);

    PayOrder getByStandardNoAndMemeberIdNotSuccess(String standardNo, Long memeberId);

    PayOrder findByCompanyAndPaidPackageTag(String clz, Long companyId);

    PayOrder findByCompanyAndPaidPackageTagNotSuccess(String clz, Long companyId);


    /**
     * 查询用户已付款订单 有问题待解决（支付状态）
     *
     * @param userId
     * @return
     */
    List<PayOrder> getByUserId(Long userId);

    /**
     * 根据用户ID查询付款完成的标准产品订单
     *
     * @param memeberId
     * @return
     */
    List<PayOrder> getByMemeberId(Long memeberId);

    /**
     * 根据渠道key查询总销售额
     *
     * @param sourceKey
     * @return
     */
    Long getTotalPerformancebySourcekey(String sourceKey);

    /**
     * 查询总销售额
     *
     * @return
     */
    Long getTotalPerformance();

    /**
     * 根据渠道key查询总订单数
     *
     * @param sourceKey
     * @return
     */
    Long getCountOrderbySourcekey(String sourceKey);

    /**
     * 查询总订单数
     *
     * @return
     */
    Long getCountOrder();


    /**
     * 根据业务员查询总销售额
     *
     * @param inviteCode
     * @return
     */
    Long getTotalPerformancebyInviteCode(String inviteCode);

    /**
     * 根据业务员查询总订单数
     *
     * @param inviteCode
     * @return
     */
    Long getCountOrderbyInviteCode(String inviteCode);

    /**
     * 保存数据
     *
     * @param payOrder 实体对象
     */
    PayOrder save(PayOrder payOrder);

    void saveAll(List<PayOrder> payOrders);

    /**
     * 状态(启用，冻结，删除)/批量状态处理
     */
    @Transactional(rollbackFor = Exception.class)
    Boolean updateStatus(StatusEnum statusEnum, List<Long> idList);

    Long countAll();
}